Automation systems such as building automation, industrial automation and home automation systems typically are distributed systems in which many different intelligent components contribute to the operation of the system. In most cases, an automation system is unique to a job site or building, and the controllers that receive data from temperature sensors, operate switches, or manage other devices in an automation system must be programmed for a specific environment or building site.
In conventional systems, the job of programming a controller has required skilled software engineers having knowledge of the programming languages and operating environments supported by the controllers being programmed. The job of determining what the controllers are to be programmed to do has typically been performed by a domain expert, that is, a person with knowledge of the requirements and goals of a particular automation system. The domain expert typically knows the requirements of the system and communicates these requirements to the software engineers who program the controllers of a building automation system to meet the requirements. Thus in order to build a new automation system, conventional automation development environments require the skills and expertise of both a software engineer and a domain expert.
Further, conventional systems may require the skills of both a software engineer and a domain expert when changes may be desired in the operation of an existing automation system. The domain expert determines what changes may be needed and communicates the required changes in behavior of the system to the software engineers, who may then change existing controller software to meet the changed requirements.